home *** CD-ROM | disk | FTP | other *** search
- Path: newsfeed.internetmci.com!panix!not-for-mail
- From: acinader@panix.com (Arthur Cinader Jr)
- Newsgroups: comp.lang.c++,gnu.g++.help
- Subject: DONT UNDERSTAND - array of char error
- Date: 2 Mar 1996 15:44:46 -0500
- Organization: Panix
- Message-ID: <4habvu$99j@panix.com>
- NNTP-Posting-Host: panix.com
-
- I am teaching myself c++ from the Deitel & Deitel text:
- "Learning to Program C++" I am workin on one of the
- excercises.
-
- I have built a class called Param for passing labels and
- parameters around. I want to store the labels and parameters
- in an array of strings. To this end, I had the following
- declaration in my header file:
-
- char *labels[];
- char *params[];
-
- the compiler, g++, gave me the following error:
-
- param.h:21: field `labels' has incomplete type
-
- I don't understand why this doesn't work.
-
- In any event, I changed the declaration to:
-
- char **labels;
- char **params;
-
- Which the compiler liked. Now, I am unable to new the arrays.
- In the definition (.C) file, I use the comand:
-
- labels = new char[maxargs][fieldlength]; // make label array
- params = new char[maxargs][fieldlength]; // make params array
-
- The compiler complains with the following:
-
- param.C: In method `Param::Param(char *)':
- param.C:11: assignment to `char **' from `char (*)[1]'
- param.C:16: assignment to `char **' from `char (*)[1]'
-
- I do not understand why?
-
- I have included the source for the class below. Any help
- is appreciated.
-
- Arthur
- <mailto:acinader@panix.com>
-
- P.S. do the deletes in my destructor look kosher?
-
-
- ******begin source****
-
- // Parameter class for passing labels and parameters
-
- #ifndef PARAM_H
- #define PARAM_H
-
- class Param {
- public:
- Param(char *);
- void addlabel(char *);
- void nextlabel();
- const char *getlabel() const;
- int getlabelcnt() const;
- void addparam(char *);
- void nextparam();
- const char *getparam() const;
- int getparamcnt() const;
- ~Param();
- private:
- const int maxargs;
- const int fieldlength;
- char **labels;
- int labelcnt;
- char *labelitr; // label iterator
- char **params;
- int paramcnt;
- char *paramitr; // parameter iterator
-
- };
-
- #endif
-
-
- // Param class definition
-
- #include<iostream.h>
- #include<assert.h>
- #include "param.h"
-
- // Constructor
- Param::Param(char *shape)
- :maxargs(10),fieldlength(20)
- {
- labelcnt = 0;
- labels = new char[maxargs][fieldlength]; // make label array
- assert(labels != 0); // make sure memory allocated
- labelitr = labels[labelcnt]; // set lablitr to first label
- addlabel(shape); // set first label to shape name
-
- paramcnt = 0;
- params = new char[maxargs][fieldlength]; // make params array
- assert(params != 0); // make sure memorey allocated
- paramitr = params[paramcnt];
- }
-
- // add label
- void Param::addlabel(char *label) { *labels[labelcnt++] = *label; }
-
- // label iterator
- void Param::nextlabel() { ++labelitr; }
-
- // get label -- copy result to string
- const char *Param::getlabel() const { return labelitr; }
-
- // get label count
- int Param::getlabelcnt() const { return labelcnt; }
-
- // add parameter
- void Param::addparam(char *param) { *params[paramcnt++] = *param; }
-
- // parameter iterator
- void Param::nextparam() { ++paramitr; }
-
- // get parameter -- copy result to string
- const char *Param::getparam() const { return paramitr; }
-
- // get parameter count
- int Param::getparamcnt() const { return paramcnt; }
-
- // destructor
- Param::~Param()
-
- {
- delete [] labels;
- delete [] params;
- }
-